<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<pre>
    //构造函数，通常首字母大写，用来构造对象实例
  //构造函数，通常首字母大写，用来构造对象实例
    function Car(name){
        let self = this //会隐性返回this ，也可自定义别的对象 eg:{}等【这样不会继承原型】
        this.name = name
        return self //会隐性返回this，  也可自定义别的对象 eg:{}等【这样不会继承原型】
    }
    var auto = new Car('Honda');

    语法
    new constructor[([arguments])]

    描述
    new 关键字会进行如下的操作：

    创建一个空的简单JavaScript对象（即{}）；
    链接该对象（设置该对象的constructor）到另一个对象 ；
    将步骤1新创建的对象作为this的上下文 ；
    如果该函数没有返回对象，则返回this。


     //构造函数，通常首字母大写，用来构造对象实例
    function Car(name){
        let self = this //会隐性返回this ，也可自定义别的对象 eg:{}等【这样不会继承原型】
        this.name = name
        return self //会隐性返回this，  也可自定义别的对象 eg:{}等【这样不会继承原型】
    }

    Car.prototype.print = function (){
        console.log(this.name)
    }

    //构造对象
    function newMethod(Obj,...args){
        let obj = {} //创建一个空的简单JavaScript对象（即{}）；let obj = new Object()也可
        obj.__proto__ = Obj.prototype //链接该对象（设置该对象的constructor）到另一个对象 ；
        Obj.apply(obj,args)//将步骤1新创建的对象作为this的上下文 ；
       return obj //返回构造好的实例。
    }
    //构造对象2
    function newMethod2(Obj,...args){
        let obj = Object.create(Obj.prototype)//创建一个指向Obj原型的空对象 【合并了newMethod的1、2两步】
        Obj.apply(obj,args)//将步骤1新创建的对象作为this的上下文 ；
       return obj //返回构造好的实例。
    }

    let car = newMethod2(Car,'特斯拉plus')
    car.print()
</pre>
</body>
<script>
    //构造函数，通常首字母大写，用来构造对象实例
    function Car(name){
        let self = this //会隐性返回this ，也可自定义别的对象 eg:{}等【这样不会继承原型】
        this.name = name
        return self //会隐性返回this，  也可自定义别的对象 eg:{}等【这样不会继承原型】
    }

    Car.prototype.print = function (){
        console.log(this.name)
    }

    function newMethod(Obj,...args){
        let obj = {} //创建一个空的简单JavaScript对象（即{}）；let obj = new Object()也可
        obj.__proto__ = Obj.prototype //链接该对象（设置该对象的constructor）到另一个对象 ；
        Obj.apply(obj,args)//将步骤1新创建的对象作为this的上下文 ；
       return obj //返回构造好的实例。
    }

    function newMethod2(Obj,...args){
        let obj = Object.create(Obj.prototype)//创建一个指向Obj原型的空对象 【合并了newMethod的1、2两步】
        Obj.apply(obj,args)//将步骤1新创建的对象作为this的上下文 ；
       return obj //返回构造好的实例。
    }

    let car = newMethod2(Car,'特斯拉plus')
    car.print()

    console.log(Car === Car.prototype.constructor)
    console.log(Car.prototype.constructor)
</script>
</html>